package n1470;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.StringTokenizer;

public class Main {

	static HashMap<Integer,List<Integer>> map=new HashMap<Integer, List<Integer>>();
	
	static int quest[][]=new int[10000][2];
	
	static int qnum;
	static int parent[]=new int[901];
	static boolean visit[]=new boolean[901];
	static int ans[]=new int[901];
	static int find(int x)
	{
		if(parent[x]!=x)parent[x]=find(parent[x]);
		return parent[x];
	}
	
	static void dfs(int cur)
	{
		visit[cur]=true;
		parent[cur]=cur;
		
		
		for(int tmp:map.get(cur))
		{
			dfs(tmp);
			parent[tmp]=cur;
		}
		
		for(int i=0;i<qnum;i++)
		{
			if(visit[quest[i][0]]&&cur==quest[i][1])
			{
				ans[find(quest[i][0])]++;
			}
//			else if(visit[quest[i][1]]&&cur==quest[i][0])
//			{
//				ans[find(quest[i][1])]++;
//			}
		}
		
		
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub

		BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
		Scanner cin=new Scanner(bf);
		while(cin.hasNext())
		{
			Arrays.fill(ans, 0);
			Arrays.fill(visit, false);
		int num=cin.nextInt();
		for(int i=0;i<num;i++)
		{
			int cur=-1,child=-1;
			while(cur==-1||child==-1)
			{
				String tmp=cin.next();
			StringTokenizer st=new StringTokenizer(tmp,":()");
			if(st.countTokens()==1)
			{
				if(cur==-1)cur=Integer.parseInt(st.nextToken());
				else child=Integer.parseInt(st.nextToken());
			}
			else if(st.countTokens()==2){
				cur=Integer.parseInt(st.nextToken());
				child=Integer.parseInt(st.nextToken());
			}
			}
			map.put(cur, new ArrayList<Integer>());
			for(int j=0;j<child;j++)
			{
				int tmp=cin.nextInt();
				map.get(cur).add(tmp);
			}
		}
		qnum=cin.nextInt();
		for(int j=0;j<qnum;j++)
		{
			int n1=-1,n2=-1;
			while(n1==-1||n2==-1)
			{
				StringTokenizer st=new StringTokenizer(cin.next(),"()");
				if(n1==-1)n1=Integer.parseInt(st.nextToken());
				else if(n2==-1)n2=Integer.parseInt(st.nextToken());
			}
			quest[j][0]=n1;
			quest[j][1]=n2;
		}
		//find root
		
		HashSet<Integer> set=new HashSet<Integer>();
		for(Integer s:map.keySet())set.add(s);
		for(List<Integer> list:map.values())
			for(Integer s:list)set.remove(s);
		int root=set.iterator().next();
		dfs(root);
		for(int i=1;i<=num;i++)
		{
			if(ans[i]>0)
			{
				System.out.println(i+":"+ans[i]);
			}
		}
		}
	}

}
